home *** CD-ROM | disk | FTP | other *** search
- /*
- --- Version 2.2 90-10-12 10:33 ---
-
- CTask Name searching routines
-
- Public Domain Software written by
- Thomas Wagner
- Ferrari electronic Gmbh
- Beusselstrasse 27
- D-1000 Berlin 21
- Germany
-
- This file is new with version 2.1.
- The find_name and find_group_name functions were moved here from
- 'tsksub.c', since they are not needed in the basic kernel.
- This will save some code in applications not using the routines.
-
- The add_name function to add a statically allocated structure to
- the name list has been added in version 2.1.
- */
-
- #include "tsk.h"
- #include "tsklocal.h"
-
- #if (TSK_NAMED)
-
- local int Staticfunc tsk_streq (byteptr n1, byteptr n2)
- {
- while (*n1 && *n1 == *n2)
- {
- n1++;
- n2++;
- }
- return *n1 == *n2;
- }
-
- /*
- find_name
- find_group_name
- find structure, given name and type.
- If type is less than zero, the first name-element matching the
- name is returned.
- If type is greater or equal to zero, the first structure matching
- the name and type is returned.
- */
-
- #if (GROUPS)
- farptr Globalfunc find_group_name (gcbptr group, byteptr name, int kind)
- {
- queptr curr;
-
- if (kind == TYP_GROUP && tsk_streq (name, group->namelist.name))
- return group;
-
- for (curr = group->namelist.list.first; !(curr->kind & Q_HEAD); curr = curr->next)
- if (kind < 0 || (int)curr->kind == kind)
- if (tsk_streq (name, ((nameptr)curr)->name))
- return (kind >= 0) ? ((nameptr)curr)->strucp : curr;
-
- return LNULL;
- }
- #endif
-
-
- farptr Globalfunc find_name (byteptr name, int kind)
- {
- #if (GROUPS)
- farptr curr;
- gcbptr group;
-
- if (tsk_global == LNULL)
- if (!ctask_resident ())
- return LNULL;
-
- for (group = GLOBDATA current_task->group;
- group != LNULL; group = group->home)
- if ((curr = find_group_name (group, name, kind)) != LNULL)
- return curr;
- #else
- queptr curr;
-
- if (kind == TYP_GROUP)
- return LNULL;
-
- for (curr = GLOBDATA name_list.list.first; !(curr->kind & Q_HEAD);
- curr = curr->next)
- if (kind < 0 || (int)curr->kind == kind)
- if (tsk_streq (name, ((nameptr)curr)->name))
- return (kind >= 0) ? ((nameptr)curr)->strucp : curr;
- #endif
-
- return LNULL;
- }
-
-
- void Globalfunc add_event_name (nameptr elem)
- {
- CRITICAL;
-
- if (elem->name [0] && elem->list.first == LNULL)
- {
- C_ENTER;
- #if (GROUPS)
- tsk_putqueue (&GLOBDATA current_task->group->namelist.list, (queptr)&elem->list);
- #else
- tsk_putqueue (&GLOBDATA name_list.list, (queptr)&elem->list);
- #endif
- C_LEAVE;
- }
- }
- #endif
-
-
-